package com.hyper_yang.javase.supplement;

import org.junit.jupiter.api.Test;

import java.io.UnsupportedEncodingException;
import java.util.*;


public class StringTest {

    // TODO: 体验 String支持的构造形式
    @Test
    public void test01() {
//        public String(); 初始化新创建的 String对象，使其表示为空字符序列。
        String str1 = new String();
        String str2 = "";
//        String(String original) 初始化一个新创建的 String对象使其表示一个与参数相同的字符串。
        String str3 = new String("hahaha");
//        public String(char[] value) 通过当前参数中的字符数组来构建新的 String
        char[] chars1 = {'a', 'b', 'c'};
        String str4 = new String(chars1);
        System.out.println("str4: " + str4);
//        public String(char[] value, int offset, int count) 通过字符数组的一部分来构造新的 String
        char[] chars2 = {'我', '爱', '中', '国'};
        String str5 = new String(chars2, 2, 2);
        System.out.println("str5: " + str5);
//        public String(byte[] bytes) 通过使用平台的默认字符集解码当前参数中的字节数组来构造 String
        byte[] bytes = {65, 66, 67, 68};
        String str6 = new String(bytes);
        System.out.println("str6: " + str6);
//        public String(byte[] bytes, String charsetName) 通过使用指定的字符集解码当前参数中的字节数组来构造新的 String
        byte[] bytes2 = {97, 98, 99, 100};
        try {
            String str7 = new String(bytes2, "GBK");
            System.out.println("str7: " + str7);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

    // TODO: 常用方法一
    @Test
    public void test02() {
        String str1 = " 我爱你中国~ ";
//            boolean isEmpty()
        System.out.println(str1.isEmpty());
//            int length()
        System.out.println(str1.length());
//            String concat()
        String str2 = " 比心 ";
        System.out.println(str1.concat(str2));
//            boolean equals(Object obj)
        System.out.println(str1.equals(str2));
//            boolean equalsIgnoreCase(Object obj)
        System.out.println(str1.equalsIgnoreCase(str2));
//            int compareTo(String other)
        System.out.println(str1.compareTo(str2));
//            int compareToIgnoreCase(String other)
        System.out.println(str1.compareToIgnoreCase(str2));
//            String toLowerCase()
        String str3 = "ABCDEF";
        System.out.println(str3.toLowerCase());
//            String toUpperCase()
        String str4 = "abcdef";
        System.out.println(str4.toUpperCase());
//            String trim()  // TODO: 去除空白字符
        System.out.println(str1.trim() + "---" + str2.trim());
    }

    // TODO: 常用方法二
    @Test
    public void test03() {
        String str = "今天风和日丽，是因为昨天晚上下雨了";
//        boolean contains(x) 是否包含 x
        System.out.println(str.contains("日丽"));
//        int indexOf(x) 从前往后找当前字符串中 x，即如果有返回第一次出现的下标，没有返回 -1
        System.out.println(str.indexOf("下雨"));
//        int lastIndexOf(x) 从后往前找当前字符串中 x，即如果有返回最后一次出现的下标，要是没有返回 -1
        System.out.println(str.lastIndexOf("风和"));
        // substring(int beginIndex)
        System.out.println(str.substring(4));
        // substring(int beginIndex, int endIndex)  不包括 endIndex
        System.out.println(str.substring(14, str.length()));
        // charAt(int index)
        System.out.println(str.charAt(4));
        // char[] toCharArray()
        System.out.println(Arrays.toString(str.toCharArray()));
        // byte[] getBytes()   --  new String(bytes[])
        try {
            // todo 编码: 按照指定的字符集编码，进行转换。
            byte[] bytes = str.getBytes("utf-8"); // 1 -> 3
            System.out.println(Arrays.toString(bytes));
            // todo 解码: 将字节转换为字符
            String str2 = new String(bytes, "GBK"); // 2 -> 1
            System.out.println(str2);
            String str3 = new String(bytes, "utf-8"); // 3 -> 1
            System.out.println(str3);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

    // TODO: 常用方法三
    @Test
    public void test04() {
        String str = "吴某凡踩着缝纫机，吃着某大碗宽面。";
        // boolean startWith()
        System.out.println(str.startsWith("吴某凡"));
        // boolean endWith()
        System.out.println(str.endsWith("大碗宽面"));
        System.out.println(str.endsWith("大碗宽面。"));
        // String replace(char oldChar, char newChar)  【内容匹配所有，所有都替换】
        System.out.println(str.replace("某", "亦"));
        // String replace(charSequence target, charSequence resource)
        System.out.println(str.replace("吴某凡", "宋某野"));
        // replaceAll  【正则表达式】

        // String[] split()
        String str2 = "1 2 3 4 5";
        System.out.println(Arrays.toString(str2.split(" ")));
    }
}
